package gest;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Utente_Impl extends UnicastRemoteObject implements Utente{

	private int idUt;
	public static Connection conn;
	private int nu;
	private String nome;
	private int idade;
	
	
	public Utente_Impl(int nu) throws RemoteException {
		this.nu = nu;
		Statement st;
		ResultSet rs;
		if (conn == null)
			conn = DBConnection.get_conn();
		try {
			st = conn.createStatement();
			rs = st.executeQuery("select idUt, nome, idade from Utentes where nu="
							+ nu);
			if (rs.first()) {
				this.idUt = rs.getInt(1);
				this.nome = rs.getString(2);
				this.idade = rs.getInt(3);
			} else {
					st.execute("insert into Utentes (nu) values ("
						+ nu + ")", st.RETURN_GENERATED_KEYS);
					rs = st.getGeneratedKeys();
					rs.first();
					this.idUt = rs.getInt(1);
					this.nome = "Nao Inserido";
					this.idade = -1;
				}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public int get_idUt() throws RemoteException {
		return this.idUt;
	}

	public String get_nome() throws RemoteException {
		return this.nome;
	}

	public int get_nu() throws RemoteException {
		return this.nu;
	}

	public int get_idade() throws RemoteException {
		return this.idade;
	}

	public boolean set_nome(String nome) throws RemoteException {
		if (!this.nome.equals(nome)){
			if (update_field("nome", nome)) {
				this.nome = nome;
			}
		}
		return true;
	}

	public boolean set_idade(int idade) throws RemoteException {
		if (this.idade!=idade){
			if (update_field("idade", idade)) {
				this.idade = idade;
			}
		}
		return true;
	}

	public boolean set_nu(int nu) throws RemoteException {
		if (this.nu!=nu){
			if (update_field("nu", nu)){
				this.nu = nu;
			}
		}
		return true;
	}

	private boolean update_field(String field, Object Value) {
		Statement st;
		try {
			if (conn == null)
				conn = DBConnection.get_conn();
			st = conn.createStatement();
			String query = "update Utentes set " + field + "='"
					+ Value.toString() + "' where nu=" + this.nu;
			st.execute(query);
		} catch (SQLException e) {
			e.printStackTrace();
		}	
		return true;
	}
	
}
